package com.cos.m3.web.interceptor;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author: COS
 * @time: 2022/6/9 10:11
 * @description:
 * 过滤器
 * 使用方法回调实现
 * 依赖tomcat
 * 拦截范围更大,进入servlet之前就可以拦截几乎所有的请求
 * 使用字符串编码的设置,登录验证
 *
 * 拦截器
 * 反射
 * 依赖spring
 * 拦截范围,请求进入servlet之后的才会被拦截,controller方法
 * 需要注入bean的时候使用拦截器,执行逻辑处理
 */
public class MyInterceptor implements HandlerInterceptor {
    //@Autowired

    /**
     *
     * @author: COS
     * @return:
     * @time: 2022/6/9 10:12
     * @description:
     * 进入controller方法之前执行
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("进入controller之前,想去的是:"+request.getRequestURI());
        if (request.getPart("file").getSize()>204800) {
            //转发或者重定向跳转其他页面给与提示
            return false;
        }
        //true代表放行方法
        //false代表不放行方法
        return true;
    }
    /**
     *
     * @author: COS
     * @return:
     * @time: 2022/6/9 10:16
     * @description:
     * 返回的方法,即进入controller后,返回执行的方法
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response,
                           Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("controller执行完啦,接下来去:"+modelAndView.getViewName());
    }
    /**
     *
     * @author: COS
     * @return:
     * @time: 2022/6/9 10:17
     * @description:
     * view 渲染完成之后执行,一般关闭或回收资源使用
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("数据渲染好啦~");
    }
}
